/**
 * @file datamanager.h plik z klasą DataManager do obsługi pregenerowanych danych
 */

#ifndef DATAMANAGER_H
#define DATAMANAGER_H

#include <QMap>

/**
 * @class DataManager
 * @brief obsługa pregenerowanych danych
 * klasa do obsługi pregenerowanych danych \n
 * Dostęp do instancji klasy tylko poprzez statyczną metodę "instance()"
 */
class DataManager
{
public:
	/**
	 * @param pos pozycja sinusa
	 * @brief wartość funkcji sinus dla zadanego punktu
	 * 0 < pos < 2PI z dokładnością do 0.1 \n
	 * dane wyjściowe: sin(pos)
	 * @return wartość sinusa
	 * @see DataManager::getSin
	 */
	const double &getSin(const double &pos);
	/**
	 * @param pos pozycja cosinusa
	 * @brief wartość funkcji cosinus dla zadanego punktu
	 * 0 < pos < 2PI z dokładnością do 0.1 \n
	 * dane wyjściowe: cosin(pos)
	 * @return wartość cosinusa
	 * @see DataManager::getSin
	 */
	const double &getCos(const double& pos);
	/**
	 * @param pos pozycja pierwiastka
	 * @brief wartość pierwiastka kwadratowego
	 * 0 < pos < 800 \n
	 * dane wyjściowe: sqrt(pos)
	 * @return wartość pierwiastka
	 */
	const double &getSqrt(const int &pos);
private:
	DataManager();
	~DataManager();
	double * table;
	double * cTable;
	double * sqrtTable;
public:
	/**
	 * @brief instancja klasy
	 * funkcja zwracająca wskaźnik do instancji klasy (jednej na cały program)
	 * @return instancja
	 */
	static DataManager * instance();
};

#endif // DATAMANAGER_H
